import router from '@/router'
const whiteList = ['/login', '/404']// 白名单
import store from '@/store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
NProgress.configure({ showSpinner: false })// 去掉默认右上角转圈
// 为什么不能放在login 因为如果放在login,那用户可以登录之后一直不退出
// 为什么不能放在layout的created，因为我们万一做一个页面组件是一级路由 用户
// 前置路由守卫
// '/' -> '/login' -> '/' 二楼往二楼跳 里面
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  const token = store.getters.token
  if (token) {
    // 在这块拿 一次就行了
    // if(vuex中没有用户数据){
    //   store.dispatch('user/getUserInfo')
    // }
    // vue是spa 只有一个页面
    // 路由跳转不算刷新
    if (!store.state.user.userInfo.userId) {
      // console.log(12345)
      const menus = await store.dispatch('user/getUserInfo')
      // console.log(store.state.user.userInfo.roles.menus)
      const selectedRoutes = await store.dispatch('permissions/filterRoute', menus)
      router.addRoutes(selectedRoutes)
      next(to.path)// 先回家知道家里最新的情况再出发
    }

    if (to.path === '/login') {
      next('/')
    } else {
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
  NProgress.done()
})
// 后置路由守卫
router.afterEach(() => {
  NProgress.done()
})

// 默认导出 按需导出
// 默认导入 按需导入 直接导入

// 到之前
// 到之后

// 黑马程序员 --before-> 西湖 --> after

// a路由 -beforeEach-> b路由 afterEach

// a --> b
// 跨域有三种办法
// 1. jsonp 但是这个只需要理解原理 面试的时候才有用处 实际上班没用的 因为它有缺点 只支持get请求
// 2. cors 如果公司用这个，前端什么都不用做 之前面经项目没有处理跨域
// 3. 反向代理 开发的时候和线上的时候不一样 开发的时候配置要前端做 在vue.config.js中配置一个proxy （代码是固定的写法）线上的时候需要后台java配置nginx
